package com.zh.springcloud.config;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * 配置回调
 */
@Configuration
public class RabbitConfig {

	@Bean
	public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory){
		RabbitTemplate rabbitTemplate = new RabbitTemplate();
		rabbitTemplate.setConnectionFactory(connectionFactory);
		//设置开启Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数
		rabbitTemplate.setMandatory(true);
		// 没有找到交换机的回调，没有找到队列也会调用这个回调
		rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
			@Override
			public void confirm(CorrelationData correlationData, boolean ack, String cause) {
				System.out.println("======setConfirmCallback:{}");
				System.out.println("ConfirmCallback:     "+"相关数据："+correlationData);
				System.out.println("ConfirmCallback:     "+"确认情况："+ack);
				System.out.println("ConfirmCallback:     "+"原因："+cause);
			}
		});
		// 没有找到队列的回调
		rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
			@Override
			public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
				System.out.println("======setReturnCallback:{}");
				System.out.println("ReturnCallback:     "+"消息："+message);
				System.out.println("ReturnCallback:     "+"回应码："+replyCode);
				System.out.println("ReturnCallback:     "+"回应信息："+replyText);
				System.out.println("ReturnCallback:     "+"交换机："+exchange);
				System.out.println("ReturnCallback:     "+"路由键："+routingKey);
			}
		});

		return rabbitTemplate;
	}
}

